gdk_x11_display_event_translator_init))
static void
-gdk_x11_display_init (GdkX11Display *display)
+gdk_x11_display_init (GdkX11Display *self)
{
- display->monitors = g_ptr_array_new_with_free_func (g_object_unref);
+ self->monitors = g_list_store_new (GDK_TYPE_MONITOR);
}
static void
g_object_unref (display_x11->screen);
g_list_free_full (display_x11->screens, g_object_unref);
- g_ptr_array_free (display_x11->monitors, TRUE);
+ g_list_store_remove_all (display_x11->monitors);
+ g_object_unref (display_x11->monitors);
g_free (display_x11->startup_notification_id);
{
GdkX11Display *x11_display = GDK_X11_DISPLAY (display);
- return x11_display->monitors->len;
+ return g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors));
}
int monitor_num)
{
GdkX11Display *x11_display = GDK_X11_DISPLAY (display);
+ GdkMonitor *monitor;
- if (0 <= monitor_num && monitor_num < x11_display->monitors->len)
- return (GdkMonitor *)x11_display->monitors->pdata[monitor_num];
+ if (monitor_num < 0)
+ return NULL;
+
+ monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), monitor_num);
+ if (monitor)
+ g_object_unref (monitor);
+
+ return monitor;
return NULL;
}
/**
* gdk_x11_display_get_primary_monitor:
- * @display: a #GdkDisplay
+ * @self: a #GdkDisplay
*
* Gets the primary monitor for the display.
*
GdkMonitor *
gdk_x11_display_get_primary_monitor (GdkDisplay *display)
{
- GdkX11Display *x11_display = GDK_X11_DISPLAY (display);
+ GdkX11Display *self = GDK_X11_DISPLAY (display);
+ GdkMonitor *monitor;
- if (0 <= x11_display->primary_monitor && x11_display->primary_monitor < x11_display->monitors->len)
- return x11_display->monitors->pdata[x11_display->primary_monitor];
+ if (0 <= self->primary_monitor)
+ return NULL;
- return NULL;
+ monitor = g_list_model_get_item (G_LIST_MODEL (self->monitors), self->primary_monitor);
+ if (monitor == NULL)
+ return NULL;
+
+ /* because g_list_model_get_item() returns a ref */
+ g_object_unref (monitor);
+ return monitor;
}
int
{
GdkX11Display *x11_display = GDK_X11_DISPLAY (x11_screen->display);
GdkX11Monitor *monitor;
+ XID output;
g_return_val_if_fail (monitor_num >= 0, None);
- g_return_val_if_fail (monitor_num < x11_display->monitors->len, None);
+ g_return_val_if_fail (monitor_num < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)), None);
- monitor = x11_display->monitors->pdata[monitor_num];
- return monitor->output;
+ monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), monitor_num);
+ output = monitor->output;
+ g_object_unref (monitor);
+
+ return output;
}
static int
{
int i;
- for (i = 0; i < x11_display->monitors->len; i++)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
+ g_object_unref (monitor);
if (monitor->output == output)
return monitor;
}
if (!rr_monitors)
return FALSE;
- for (i = 0; i < x11_display->monitors->len; i++)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
monitor->add = FALSE;
monitor->remove = TRUE;
+ g_object_unref (monitor);
}
for (i = 0; i < num_rr_monitors; i++)
NULL);
monitor->output = output;
monitor->add = TRUE;
- g_ptr_array_add (x11_display->monitors, monitor);
+ g_list_store_append (x11_display->monitors, monitor);
}
/* Fetch minimal manufacturer information (PNP ID) from EDID */
XRRFreeMonitors (rr_monitors);
XRRFreeScreenResources (resources);
- for (i = x11_display->monitors->len - 1; i >= 0; i--)
+ for (i = g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) - 1; i >= 0; i--)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
if (monitor->add)
{
gdk_display_monitor_added (display, GDK_MONITOR (monitor));
else if (monitor->remove)
{
g_object_ref (monitor);
- g_ptr_array_remove (x11_display->monitors, monitor);
+ g_list_store_remove (x11_display->monitors, i);
gdk_display_monitor_removed (display, GDK_MONITOR (monitor));
g_object_unref (monitor);
*changed = TRUE;
}
+ g_object_unref (monitor);
}
old_primary = x11_display->primary_monitor;
x11_display->primary_monitor = 0;
- for (i = 0; i < x11_display->monitors->len; ++i)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
+ g_object_unref (monitor);
if (monitor->output == primary_output)
{
x11_display->primary_monitor = i;
if (x11_display->primary_monitor != old_primary)
*changed = TRUE;
- return x11_display->monitors->len > 0;
+ return g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) > 0;
#endif
return FALSE;
if (!resources)
return FALSE;
- for (i = 0; i < x11_display->monitors->len; i++)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
monitor->add = FALSE;
monitor->remove = TRUE;
+ g_object_unref (monitor);
}
for (i = 0; i < resources->noutput; ++i)
NULL);
monitor->output = output;
monitor->add = TRUE;
- g_ptr_array_add (x11_display->monitors, monitor);
+ g_list_store_append (x11_display->monitors, monitor);
}
gdk_monitor_get_geometry (GDK_MONITOR (monitor), &geometry);
/* Which usable multihead data is not returned in non RandR 1.2+ X driver? */
- for (i = x11_display->monitors->len - 1; i >= 0; i--)
+ for (i = g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) - 1; i >= 0; i--)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
if (monitor->add)
{
gdk_display_monitor_added (display, GDK_MONITOR (monitor));
else if (monitor->remove)
{
g_object_ref (monitor);
- g_ptr_array_remove (x11_display->monitors, monitor);
+ g_list_store_remove (x11_display->monitors, i);
gdk_display_monitor_removed (display, GDK_MONITOR (monitor));
g_object_unref (monitor);
*changed = TRUE;
primary_output = XRRGetOutputPrimary (x11_screen->xdisplay,
x11_screen->xroot_window);
- for (i = 0; i < x11_display->monitors->len; ++i)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- GdkX11Monitor *monitor = x11_display->monitors->pdata[i];
+ GdkX11Monitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
+ g_object_unref (monitor);
if (monitor->output == primary_output)
{
x11_display->primary_monitor = i;
if (x11_display->primary_monitor != old_primary)
*changed = TRUE;
- return x11_display->monitors->len > 0;
+ return g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) > 0;
#endif
return FALSE;
int width, height;
int i;
- for (i = 0; i < x11_display->monitors->len; i++)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- monitor = x11_display->monitors->pdata[i];
+ monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
monitor->add = FALSE;
monitor->remove = TRUE;
+ g_object_unref (monitor);
}
monitor = find_monitor_by_output (x11_display, 0);
NULL);
monitor->output = 0;
monitor->add = TRUE;
- g_ptr_array_add (x11_display->monitors, monitor);
+ g_list_store_append (x11_display->monitors, monitor);
}
width_mm = WidthMMOfScreen (x11_screen->xscreen);
*changed = TRUE;
x11_display->primary_monitor = 0;
- for (i = x11_display->monitors->len - 1; i >= 0; i--)
+ for (i = g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)) - 1; i >= 0; i--)
{
- monitor = x11_display->monitors->pdata[i];
+ monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
if (monitor->add)
{
gdk_display_monitor_added (GDK_DISPLAY (x11_display), GDK_MONITOR (monitor));
else if (monitor->remove)
{
g_object_ref (monitor);
- g_ptr_array_remove (x11_display->monitors, monitor);
+ g_list_store_remove (x11_display->monitors, i);
gdk_display_monitor_removed (GDK_DISPLAY (x11_display), GDK_MONITOR (monitor));
g_object_unref (monitor);
*changed = TRUE;
}
+ g_object_unref (monitor);
}
}
_gdk_x11_surface_set_surface_scale (surface, scale);
}
- for (i = 0; i < x11_display->monitors->len; i++)
+ for (i = 0; i < g_list_model_get_n_items (G_LIST_MODEL (x11_display->monitors)); i++)
{
- GdkMonitor *monitor = GDK_MONITOR (x11_display->monitors->pdata[i]);
+ GdkMonitor *monitor = g_list_model_get_item (G_LIST_MODEL (x11_display->monitors), i);
gdk_monitor_set_scale_factor (monitor, scale);
+
+ g_object_unref (monitor);
}
/* We re-read the monitor sizes so we can apply the new scale */